#include "topcvt_cfg_parser.hpp"

namespace topcvt
{
	void PktConfigParser::parseElementAttributes(pugi::xml_node& node, AttributeableCfg& cfg)
	{
		for (pugi::xml_attribute attr = node.first_attribute(); attr; attr = attr.next_attribute())
		{
			cfg.set(attr.name(), attr.value());
		}
	}

	void PktConfigParser::parseRootCfg(pugi::xml_node& node, RootCfg& cfg)
	{
		cfg.setFormat(node.attribute("format").value());
		cfg.setEncoding(node.attribute("encoding").value());
	}

	void PktConfigParser::parseIncludeCfg(pugi::xml_node& node, IncludeCfg& cfg)
	{
		cfg.setDesc(node.attribute("desc").value());
		cfg.setFile(node.attribute("file").value());
	}

	void PktConfigParser::parsePolicyCfg(pugi::xml_node& node, PolicyCfg& cfg)
	{
		cfg.setDesc(node.attribute("desc").value());
		cfg.setType(node.attribute("type").value());
		cfg.setElement(node);
	}

	void PktConfigParser::parseStructCfg(pugi::xml_node& node, StructCfg& cfg)
	{
		cfg.setDesc(node.attribute("desc").value());
		cfg.setName(node.attribute("name").value());
		cfg.setElement(node);
	}

	void PktConfigParser::parseLoopCfg(pugi::xml_node& node, LoopCfg& cfg)
	{
		cfg.setDesc(node.attribute("desc").value());
		cfg.setName(node.attribute("name").value());
		cfg.setOpcount(node.attribute("opcount").value());
		cfg.setLen(node.attribute("len").value());
		cfg.setElement(node);
	}

	void PktConfigParser::parseFieldCfg(pugi::xml_node& node, FieldCfg& cfg)
	{
		cfg.setName(node.attribute("name").value());
		cfg.setDesc(node.attribute("desc").value());
		cfg.setValue(node.attribute("value").value());
		cfg.setDefval(node.attribute("defval").value());
		cfg.setPktType(node.attribute("pktType").value());
		cfg.setCType(node.attribute("cType").value());
		cfg.setTrimOption(node.attribute("trimOption").value());
	}

	void PktConfigParser::parseSwitchCfg(pugi::xml_node& node, SwitchCfg& cfg)
	{
		cfg.setDesc(node.attribute("desc").value());
		cfg.setCondition(node.attribute("condition").value());
		cfg.setElement(node);
	}

	void PktConfigParser::parseCaseCfg(pugi::xml_node& node, CaseCfg& cfg)
	{
		cfg.setDesc(node.attribute("desc").value());
		cfg.setValue(node.attribute("value").value());
		cfg.setElement(node);
	}
};